package ufro.pds;


import java.util.ArrayList;
import java.util.Calendar;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import ufro.pdssoaws.AlumnoSOAWS;
import ufro.pdssoaws.AnotacionesSOAWS;
import android.app.Activity;
import android.app.DatePickerDialog;
import android.app.Dialog;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.DatePicker;
import android.widget.EditText;
import android.widget.RadioButton;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;



public class IngresarAnotacion extends Activity {

	//Global variable declaration
	private AnotacionesSOAWS pws = new AnotacionesSOAWS();
	private AlumnoSOAWS a= new AlumnoSOAWS();
	private Spinner spinnercurso;
	private Spinner spinnersubsector;
	private Spinner spinneralumno;
	private RadioButton radio_positivo;
	private RadioButton radio_negativo;
	private RadioButton radio_neutro;
	private EditText anotacion;
	private Button btnguardar;
	private int ajustarCurso = 1;
	private int tipo_anotacion = 1;
	private int mYear;
	private int mMonth;
	private int mDay;
	ArrayList<String> listalumnos ;
	ArrayList<String> listaid;
	String rutAlumno;
	private String rutAnotador = "123451";
	private String fechaSeleccionada;
	private String anotacionAlumno;
	private String resultado = null;
	private TextView mDateDisplay;
	private Button mPickDate;

	static final int DATE_DIALOG_ID = 0;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.ingresar);
		/**
		 * se hace referencia a los datos de xml , para unir la vista con el xml.
		 */
		spinnercurso = (Spinner)findViewById(R.id.spiner1);
		spinnersubsector = (Spinner)findViewById(R.id.spiner2);
		spinneralumno = (Spinner)findViewById(R.id.spiner3);
		anotacion = (EditText) findViewById(R.id.textoanotac);
		btnguardar = (Button)findViewById(R.id.btnguardar);
		mDateDisplay = (TextView) findViewById(R.id.dateDisplay);
		mPickDate = (Button) findViewById(R.id.pickDate);

		// Se escucha cuando se hace click en el boton
		mPickDate.setOnClickListener(new View.OnClickListener() {
			public void onClick(View v) {
				showDialog(DATE_DIALOG_ID);
			}
		});
		// Obtener la fecha actual
		final Calendar c = Calendar.getInstance();
		mYear = c.get(Calendar.YEAR);
		mMonth = c.get(Calendar.MONTH);
		mDay = c.get(Calendar.DAY_OF_MONTH);

		// Mostrar la fecha actual
		updateDisplay();

		//Cargamos Cursos estaticamente en un spinner
		String[] listacurso = {"Primero A","Primero B","Segundo A","Segundo B","Tercero A"};
		ArrayAdapter<String> adaptador = new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item, listacurso);
		adaptador.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

		//Escuchamos la seleccion del curso, para cargar los alumnos.
		spinnercurso.setOnItemSelectedListener(new MyOnItemSelectedListener());
		spinnercurso.setAdapter(adaptador);

		//Cargamos los datos de subsector de manera estatica.
		String[] listasubsector = {"Matematicas","Lenguaje","Ingles"};
		ArrayAdapter<String> adaptador2 = new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item, listasubsector);
		adaptador2.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
		spinnersubsector.setAdapter(adaptador2);


		//Llamamos al webservices con los parametros pasados por el usuario. Rut del anotador estatico.
		btnguardar.setOnClickListener(new OnClickListener() {

			public void onClick(View v) {

				// fechaSeleccionada = fecha.getText().toString();
				fechaSeleccionada = mDateDisplay.getText().toString();
				anotacionAlumno = anotacion.getText().toString();

				resultado = pws.add(fechaSeleccionada,anotacionAlumno,radioButtonSelected(),rutAnotador, rutAlumno);
				Toast.makeText(getBaseContext(), resultado, 
						Toast.LENGTH_SHORT).show();
			}
		});

	}

	/**
	 * @author Team "El experimento"
	 * Escucha la posicion del spinner alumno.
	 *
	 */
	public class MyOnItemSelectedListenerAlumno implements OnItemSelectedListener  {

		public void onItemSelected(AdapterView<?> parent,
				View view, int pos, long id) {
			//Intancia al metodo con posicion escuchada del spinner
			rutAlumnoSelected(pos);

		}

		public void onNothingSelected(AdapterView<?> parent) {
			// No hacer nada.
		}
	}

	/**
	 * Metodo que inicia la llamada y crea el dialogo tipo "flash" 
	 */
	protected Dialog onCreateDialog(int id) {
		switch (id) {
		case DATE_DIALOG_ID:
			return new DatePickerDialog(this,
					mDateSetListener,
					mYear, mMonth, mDay);
		}
		return null;
	}

	/**
	 *  Devolucion de la llamada cuando el usuario "setea" la fecha en el cuadro de dialogo
	 */
	private DatePickerDialog.OnDateSetListener mDateSetListener =
			new DatePickerDialog.OnDateSetListener() {

		public void onDateSet(DatePicker view, int year, 
				int monthOfYear, int dayOfMonth) {
			mYear = year;
			mMonth = monthOfYear;
			mDay = dayOfMonth;
			updateDisplay();
		}
	};


	/**        
	 *  Actualizacion de la fecha en el TextView
	 */
	private void updateDisplay() {
		mDateDisplay.setText(
				new StringBuilder()

				.append(mDay).append("-")
				.append(mMonth + 1).append("-")
				.append(mYear).append(" "));
	}
	/**
	 * @author Team "El experimento"
	 * Se escucha el spinner de curso y se usa la posicion para llamar al metodo.
	 *
	 */
	public class MyOnItemSelectedListener implements OnItemSelectedListener  {

		public void onItemSelected(AdapterView<?> parent,
				View view, int pos, long id) {
			//Intancia al metodo con posicion escuchada del spinner
			cargarSpinnerAlumno(pos+ajustarCurso);

		}

		public void onNothingSelected(AdapterView<?> parent) {
			// Hacer nada.
		}
	}
	/**
	 * Guarda el rut seleccionado de un alumno.
	 * @param post int
	 */
	public void rutAlumnoSelected(int post){
		rutAlumno = "";
		rutAlumno = listaid.get(post);
	}
	/**
	 * Devuelve el id del tipo_anotacion seleccionada.
	 *  @return tipo_anotacion int
	 */

	public int radioButtonSelected(){

		radio_positivo =(RadioButton)findViewById(R.id.radio0);
		radio_negativo =(RadioButton)findViewById(R.id.radio1);
		radio_neutro =(RadioButton)findViewById(R.id.radio2);

		if(radio_positivo.isChecked())
		{
			tipo_anotacion = 2;
		}
		if(radio_negativo.isChecked())
		{
			tipo_anotacion = 3;
		}
		if(radio_neutro.isChecked())
		{
			tipo_anotacion = 1;
		}
		return tipo_anotacion;

	}
	/**
	 * Metodo que carga un spinner con alumnos, segun el id del curso seleccionado
	 * @param idCurso int
	 */

	public void cargarSpinnerAlumno(int idCurso){

		cargarLista(idCurso);

		ArrayAdapter<String> adaptador3 = new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item, this.listalumnos);
		adaptador3.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
		spinneralumno.setOnItemSelectedListener(new MyOnItemSelectedListenerAlumno());
		spinneralumno.setAdapter(adaptador3);

	}
	/**
	 * Metodo que carga una lista de alumnos y una lista de rut de un curso segun id del curso
	 * @param idCurso int
	 */
	public void cargarLista(int idCurso){

		JSONArray jsonArray = null;
		listalumnos = new  ArrayList<String>();
		listaid = new ArrayList<String>();
		String datosjson = a.findAlumno(idCurso);

		try {
			jsonArray = new JSONArray(datosjson);

			for (int i = 0; i < jsonArray.length(); i++) {

				JSONObject objeto = (JSONObject) jsonArray.get(i);

				this.listalumnos.add(objeto.getString("nombre"));
				this.listaid.add(objeto.getString("rut"));
			}
		} catch (JSONException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}




	}



}
